地图查询概述

最后更新时间:2019年6月17日

功能介绍

功能描述

对空间数据的管理、查询与分析能力是衡量GIS平台的一个重要依据,地图查询是地理信息系统应该具备的最基础的功能,主要包括从空间位置检索空间物体及其属性、从属性条件集检索空间物体。地图查询也是移动GIS应用中最常用的核心功能之一,广泛应用于各类项目中。通过空间和属性条件查询地理要素,提取所需要素的空间与属性信息,与地图联动,进行展示,满足应用的需求。

MapGIS平台将空间信息与属性信息集中管理,通过扩展的结构化空间查询语言实现查询功能,支持空间数据查询功能。基于GIS的特性,地图要素查询可以分为空间几何查询、属性条件查询以及两者结合的复合查询。其中,空间几何查询有点查询、矩形查询、多边形查询三种基本方式,在实际引用中通常以交互操作的空间范围为限定条件进行查询;属性查询以要素属性限定条件进行查询;复合查询则是两者的结合,空间范围组合属性条件,统一查询满足要求的空间要素。

在MapGIS移动端,由于数据可分为离线和在线数据,所以从数据角度可以将地图查询分为离线数据查询、在线数据查询两类,每一类又与空间、属性、复合三种查询类型组合对应。如下图所示:

地图查询分类.png

功能应用
1
点击查询

点击查询是空间条件查询一种,通过设置空间范围条件(即点几何图形),根据选择图层、范围条件对图层要素进行查询并显示查询结果。

2
矩形查询

矩形查询是空间条件查询一种,通过设置空间范围条件(即矩形),根据选择图层、范围条件对图层要素进行查询并显示查询结果。

3
多边形查询

多边形查询是空间条件查询一种,通过设置空间范围条件(即多边形),根据选择图层、范围条件对图层要素进行查询并显示查询结果。

4
属性查询

属性条件查询,即为属性关键字查询,根据选择图层、字段、关键字对图层要素进行查询并显示查询结果。

5
复合查询

复合条件查询,是属性条件与空间条件结合应用的查询方式,根据选择图层、字段、关键字,结合空间范围条件,对图层要素进行查询并显示查询结果。

功能接口

地图查询功能接口由com.zondy.mapgis.core.featureservice程序包中的FeatureQuery(要素查询类)、FeaturePagedResult(查询结果类)、Feature(要素对象类)等提供。FeatureQuery提供的查询核心接口如下:

接口 适用情况
setQueryBound() 设置查询范围
setWhereClause() 设置属性查询条件
setSpatialFilterRelationship() 设置空间过滤条件
query() 查询

然后重点关注FeatureQuery的四个构造函数,如下表所示,适用的数据类型及应用场景都不同,根据具体情况选择对应的方法。

接口 适用数据 适用情况
FeatureQuery(VectorLayer vectorLayer) 离线/在线 离线数据最常用方法
通过矢量图层构造查询对象
FeatureQuery(IVectorCls cls) 离线 只提供.mgdb数据库时采用
通过矢量类对象构造查询对象
FeatureQuery(java.lang.String strIGServerBaseURL, java.lang.String strDataURL) 在线 能够获取在线图层数据的URL地址时采用
FeatureQuery(java.lang.String strIGServerBaseURL, java.lang.String strDocName, int mapID, int layerID) 在线 能够获取到在线图层数据在地图文档中的ID时采用

下面来给出示例展示四种构造函数的用法:

(1) 通过矢量图层构造查询对象

//获取矢量图层
VectorLayer vectorLayer =(VectorLayer) mapView.getMap().getLayer(i);
//构造查询对象
FeatureQuery featureQuery = new FeatureQuery(vectorLayer);    //参数:矢量图层

(2) 通过矢量类构造查询对象

//构造数据库对象,并打开数据
DataBase dataBase=new DataBase();
dataBase.open("······/map/WuHan/武汉MKT.mgdb");
//构造简单要素类对象,并打开要素图层
SFeatureCls sFeatureCls=new SFeatureCls(database);
sFeatureCls.open(i); //图层ID,从1开始
//构造查询对象
FeatureQuery featureQuery = new FeatureQuery(sFeatureCls);   //矢量类对象

(3) 根据在线图层的URL构造查询对象

//根据服务基地址、图层URL构造查询对象
FeatureQuery featureQuery = new FeatureQuery("http://develop.smaryun.com:6163/igs","gdbp://MapGisLocal/武汉MKT/sfcls/武汉市");

(4) 根据在线图层的ID构造查询对象

//根据服务基地址、地图文档名称、地图索引、图层索引构造查询对象
FeatureQuery featureQuery =  new FeatureQuery("http://develop.smaryun.com:6163/igs","WuHan",0,0);

提示:服务基地址即IGServer服务器所在的IP地址,其中图层图层URL、地图文档名称、地图ID、图层ID可以在MapGIS Server Manager中获取,具体方法在在线数据组织模块已经介绍,在此不赘述。

实现方法

(1) 构造查询对象:根据不同的地图数据,选择不同的查询类(FeatureQuery)构造函数,准备对应方法中的参数对象,然后构造查询对象。

(2) 设置查询条件:通过setWhereClause()设置属性条件、setQueryBound()设置空间范围条件,还可设置空间过滤条件、每页结果数目等参数。

(3) 查询并获取结果:通过FeatureQuery对象调用query()方法进行查询,返回查询结果集为FeaturePagedResult。

(4) 结果展示:解析FeaturePagedResult,将查询得到的结果要素Feature进行展示,一般可通过高亮、标注、列表等形式展现,也可获取其几何、属性信息。

要素查询实现流程.png